package video

import (
	"fmt"
	"log"
	"os"
	"os/exec"
	"strconv"
)

//将视频文件, 转换成多张图片, 并将ffmpeg执行输出到控制台
func ToPic(videoFilePath string, picDirectory string, fps int) {
	//先清空图片文件夹
	os.RemoveAll(picDirectory)
	//创建输出文件夹
	os.MkdirAll(picDirectory, 0777)
	//准备ffmpeg命令行
	cmdArgs := []string{"-i", videoFilePath, "-r", strconv.Itoa(fps), picDirectory + "\\%d.jpg"}
	cmd := exec.Command("ffmpeg", cmdArgs...)
	log.Println(cmd.String())
	// 命令的错误输出和标准输出都连接到同一个管道
	if stdout, err := cmd.StdoutPipe(); err != nil {
		return
	} else {
		cmd.Stderr = cmd.Stdout
		if err := cmd.Start(); err != nil {
			return
		} else {
			// 从管道中实时获取输出并打印到终端
			for {
				tmp := make([]byte, 1024)
				_, err := stdout.Read(tmp)
				fmt.Print(string(tmp))
				if err != nil {
					break
				}
			}
			if err = cmd.Wait(); err != nil {
				return
			}
		}
	}
}
